/* Gauge - Performance Measurement Framework for Mobile Platforms
 * Copyright (C) 2013, Juha Hytonen <juha.a.hytonen@gmail.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.gauge.GaugeServer;

import java.io.File;
import java.util.Date;

import org.gauge.Log;
import org.gauge.MeasurementStorage;

/**
 * Default implementation of a StorageFactory. Provides CSV
 * (comma separated values) storage.
 */
public final class StorageFactoryImpl implements StorageFactory {
	
	private static final String FileNameSeparator = "_";
	private static final String FileNameExtension = ".csv";
	private static final String LogSpecifier = "log";
	private static final String MeasurementsSpecifier = "measurements";
	
	private String timestamp;
	
	public StorageFactoryImpl() {
		Date timestamp = new Date();
		this.timestamp = String.valueOf(timestamp.getTime());
	}
	
	public Log CreateLog(String identifier) throws Exception {
		String fileName = createFileName(identifier, LogSpecifier);
		File logFile = new File(fileName);
		CSVFileLog log = new CSVFileLog(logFile);
		return log;
	}
	
	private String createFileName(String identifier, String specifier) {
		StringBuilder name = new StringBuilder();
		name.append(Arguments.GetTargetDir());
		name.append(identifier);
		name.append(FileNameSeparator);
		name.append(specifier);
		name.append(FileNameSeparator);
		name.append(timestamp);
		name.append(FileNameExtension);
		return name.toString();
	}
	
	public MeasurementStorage CreateMeasurementStorage(String identifier) throws Exception {
		String fileName = createFileName(identifier, MeasurementsSpecifier);
		File measurementsFile = new File(fileName);
		CSVFileMeasurementStorage storage = new CSVFileMeasurementStorage(measurementsFile);
		return storage;
	}

}
